Skip to content

cache node evaluation#502

Merged
mrshmllow merged 1 commit into
trunkfrom
marshmallow/p-okluznlzwxtq
May 31, 2026
Merged

cache node evaluation#502
mrshmllow merged 1 commit into
trunkfrom
marshmallow/p-okluznlzwxtq

Conversation

@mrshmllow
Copy link
Copy Markdown
Member

@mrshmllow mrshmllow commented May 23, 2026

Summary by CodeRabbit

Release Notes

  • New Features

    • Added evaluation caching for flake-based configurations to skip redundant re-evaluations when results already exist.
  • Performance Improvements

    • Build operations now use direct daemon communication instead of command-line invocation for faster execution.
  • Refactoring

    • Enhanced store path handling with improved type safety.
    • Improved remote client connectivity for distributed operations.

Review Change Stack

@github-actions github-actions Bot added rust Pull requests that update rust code release PRs against main labels May 23, 2026
@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented May 23, 2026

Warning

Review limit reached

@mrshmllow, we couldn't start this review because you've reached your PR review rate limit.

More reviews will be available in 29 minutes and 50 seconds. Learn how PR review limits work.

Your organization has run out of usage credits. Purchase more in the billing tab.

⌛ How to resolve this issue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans include higher PR review limits than trial, open-source, and free plans. In all cases, reviews become available again over time. During sustained high-volume PR review activity, CodeRabbit may temporarily slow when the next review becomes available.

Please see our Fair Usage Limits Policy for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: bfe3d284-4c8a-4982-b681-bf002ddea313

📥 Commits

Reviewing files that changed from the base of the PR and between 24f1b43 and ff6eeda.

📒 Files selected for processing (15)
  • .sqlx/query-6d7658c36b965ffe57cbaaa5550cd0a9c2b45ae2feeda76f7002b334bac28674.json
  • .sqlx/query-6e4989977a0257d5f67151d58936f863ece674126914d7146a75a79c0c79aa6f.json
  • .sqlx/query-7b75a4af74b33f56f2ceeea1e462d28066719fab4319880dfdd2de215c08ba6a.json
  • .sqlx/query-7d06a5ac5518429aa99edd5d878b6332ad23bf70286f29665f5b3e556aa32c5c.json
  • .sqlx/query-d2e92efc45d4c8b951656a48329273b352f5c02457bbbaea8aabb737622ccb8d.json
  • CHANGELOG.md
  • crates/cli/src/apply.rs
  • crates/cli/src/main.rs
  • crates/core/src/cache/migrations/20260523003752_attribute_lookup.sql
  • crates/core/src/cache/mod.rs
  • crates/core/src/hive/executor.rs
  • crates/core/src/hive/mod.rs
  • crates/core/src/hive/plan.rs
  • crates/core/src/hive/steps/evaluate.rs
  • crates/nix_client/src/lib.rs
📝 Walkthrough

Walkthrough

This PR introduces a comprehensive Nix daemon client library, evaluation result caching system, and refactors CLI-based operations (build and push) to use daemon APIs. It adds per-node evaluation output caching to avoid recomputation and threads cached results through execution planning and orchestration layers.

Changes

Nix Daemon Client Foundation

Layer / File(s) Summary
Workspace setup and dependencies
Cargo.toml, crates/nix_client/Cargo.toml, crates/core/Cargo.toml
Adds crates/nix_client as workspace member, declares shared itertools dependency, enables nix-compat daemon feature, and wires wire-nix-client into crates/core.
SafeStorePath wrapper type
crates/nix_client/src/store_path.rs
Introduces SafeStorePath<S> wrapper enforcing absolute-path store paths, with absolute-path construction, serialization/deserialization (serde, NixSerialize, NixDeserialize), equality, hashing, and debug formatting.
NixClient protocol and operations
crates/nix_client/src/lib.rs
Implements full async daemon client: handshake with magic/version negotiation, stderr draining with activity parsing, and nix operations (query_valid_paths, collect_complete_closure, query, get_nar_stream, framed_write, query_derivation_output_map, query_missing, build, add_to_store_nar).
NixDaemonClientError and wire types
crates/nix_client/src/lib.rs
Defines comprehensive error enum (I/O, protocol, operation failures) and wire-facing types: WireAddToStoreNarRequest, QueryMissingResult, DerivedPath, DerivedPathOutput with custom serialization.
Error type consolidation
crates/core/src/errors.rs
Adds NixDaemonClientError and StorePathError transparent variants to HiveLibError, updates NixCopyError field types, removes old store-path error variant.

Evaluation Result Caching

Layer / File(s) Summary
Database schema and query metadata
crates/core/src/cache/migrations/20260523003752_attribute_lookup.sql, .sqlx/query-*.json
Defines evaluation_cache table (composite primary key on flake identifiers and node name, non-null output paths) in STRICT mode; includes 7 SQLx query metadata files for fetch/insert/cleanup operations.
Cache service methods
crates/core/src/cache/mod.rs
Adds get_evaluations to fetch and validate cached outputs, store_evaluation to persist results, gc_evaluation_cache to clean stale entries; updates gc signature to accept shutdown flag.

Executor and Evaluation Integration

Layer / File(s) Summary
Executor oneshot notification
crates/core/src/hive/executor.rs
Updates execute and evaluate_task to accept on_new_evaluation oneshot sender; sends evaluated SafeStorePath<String> upon successful evaluation completion.
Evaluate step with cache support
crates/core/src/hive/steps/evaluate.rs
Refactors Evaluate from unit struct to carry optional cached_evaluation: Option<SafeStorePath<String>>; execute method branches to skip async evaluation when cached path is available.

Plan Generation with Caching

Layer / File(s) Summary
Plan function signature and behavior
crates/core/src/hive/plan.rs
Adds cached_evaluation: Option<SafeStorePath<String>> parameter to plan_for_node and apply_plan; disables greedy evaluation on cache hit; threads cached evaluation into emitted Evaluate steps.
Plan test expectations
crates/core/src/hive/plan.rs
Updates all 14+ test cases to pass cached_evaluation: None and assert Evaluate { cached_evaluation: None } in expected step sequences.

Hive Cache Integration

Layer / File(s) Summary
Hive cache parameter wrapping
crates/core/src/hive/mod.rs
Changes Hive::new_from_path cache parameter from Option<InspectionCache> to Arc<Option<InspectionCache>>; dereferences Arc before cache operations.
Hive test updates
crates/core/src/hive/mod.rs
Updates 7 test call sites to pass None.into() converting to the new Arc-wrapped type.

CLI Apply and Cache Orchestration

Layer / File(s) Summary
Cache creation and main wiring
crates/cli/src/main.rs
Wraps InspectionCache::new() in Arc in main; passes cloned cache to Hive::new_from_path; threads shutdown handle into apply::apply for both Apply and Build commands; updates gc call to use borrowed reference and shutdown flag.
Apply flow cache integration
crates/cli/src/apply.rs
Extends apply::apply to accept Arc<Option<InspectionCache>>; conditionally prefetches evaluations for flake nodes; removes cached entry before planning; spawns async task to persist evaluated output on completion via store_evaluation.

Build Step Daemon Migration

Layer / File(s) Summary
Build step daemon implementation
crates/core/src/hive/steps/build.rs
Replaces CLI-based Nix build with daemon client: opens local or remote daemon, queries derivation output map, constructs DerivedPath, calls daemon build, wraps errors as HiveLibError::NixBuildError.

Push and Remote Copy Operations

Layer / File(s) Summary
Remote client connection
crates/core/src/lib.rs
Adds open_remote_client spawning SSH running nix-daemon --stdio, performing handshake, returning connected NixClient plus host; adds get_common_copy_path_help for error hints.
Push function refactoring
crates/core/src/lib.rs
Reworked push to open local and remote daemons, compute closure, query remote for valid paths, stream NAR for missing paths, wrap errors as HiveLibError::NixCopyError with help.
Push import updates
crates/core/src/hive/steps/keys.rs, crates/core/src/hive/steps/push.rs
Updates step files to import push from crate instead of commands::common; updates keys.rs error handling to map to HiveLibError::StorePath.
Removal from common commands
crates/core/src/commands/common.rs
Removes Nix-copy SSH command implementation and pub async fn push(...) function.

SSH and Remote Connectivity Refactoring

Layer / File(s) Summary
SSH arguments refactoring
crates/core/src/hive/node.rs
Adds force_quiet: bool parameter to Target::create_ssh_args; conditionally appends -q when forced, otherwise appends verbosity flags; updates create_ssh_opts delegation.
Ping connectivity test refactoring
crates/core/src/hive/node.rs, crates/core/src/hive/steps/activate.rs, crates/core/src/hive/steps/ping.rs
Refactors Target::ping from CLI ssh ... exit to open_remote_client(...) with should_quit; updates caller sites to pass shutdown flag.
PTY and non-interactive command updates
crates/core/src/commands/pty/mod.rs, crates/core/src/commands/noninteractive.rs
Refactors create_starting_segment and create_ending_segment to be mode-independent; updates SSH arg calls to pass force_quiet: false.
SSH test updates
crates/core/src/hive/node.rs
Updates test cases to call create_ssh_args(modifiers, false) and verify expected arguments for both interactive and non-interactive modes.

Log Message Handling Extraction

Layer / File(s) Summary
Trace Nix log message helper
crates/core/src/commands/mod.rs
Extracts trace_nix_log_message handling Nix LogMessage variants (Start, Stop, Result), mutating build_name_map, stripping ANSI, mapping VerbosityLevel to tracing levels, returning Some for ERROR/WARN only.
ChildOutputMode simplification
crates/core/src/commands/mod.rs
Removes Interactive variant from ChildOutputMode enum; simplifies trace_slice match to handle only Generic and Nix modes.

Estimated Code Review Effort

🎯 4 (Complex) | ⏱️ ~75 minutes

Possibly Related PRs

  • forallsys/wire#400: Extends hive execution refactor by modifying execute and plan_for_node to thread cached evaluations through the same Evaluate step API.
  • forallsys/wire#496: Overlaps with evaluation output representation change from string paths to SafeStorePath<String> and oneshot sender notification in hive/executor.rs.

Poem

🐰 A rabbit with daemon tools in sight,
Caches evaluation paths oh so bright!
No more CLI calls for every deed,
Daemon speed and store paths freed!
(wire-nix-client hops the night)

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 76.67% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title 'cache node evaluation' directly and concisely describes the main objective of this pull request, which adds caching for per-node evaluation outputs in the inspection cache system.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch marshmallow/p-okluznlzwxtq

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
crates/core/src/hive/plan.rs (1)

233-247: ⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Disable greedy evaluation for Goal::Build when cache is present.

Line 246 always sets greedy_evaluate: true, so build plans still run evaluate_task even when Evaluate { cached_evaluation: Some(..) } can satisfy the step. This defeats the cache-hit fast path and causes unnecessary evaluation work.

Proposed fix
         Goal::Build => NodePlan {
+            let has_cached_evaluation = cached_evaluation.is_some();
             context: Context {
                 state: StepState::default(),
                 modifiers: *modifiers,
                 hive_location,
                 should_quit,
                 name,
                 build_id_names: Arc::new(Mutex::new(HashMap::new())),
             },
             steps: vec![
                 Step::Evaluate(Evaluate { cached_evaluation }),
                 Step::Build(Build { target: None }),
             ],
-            greedy_evaluate: true,
+            greedy_evaluate: !has_cached_evaluation,
             ignore_failed_ping: false,
         },
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@crates/core/src/hive/plan.rs` around lines 233 - 247, The plan builder sets
greedy_evaluate: true unconditionally for Goal::Build, forcing Evaluate steps to
run even when Evaluate { cached_evaluation: Some(..) } can satisfy the step;
update the Goal::Build branch in NodePlan construction to set greedy_evaluate to
false whenever the initial Evaluate has cached_evaluation.is_some() (i.e.,
inspect the cached_evaluation used when creating Step::Evaluate in that branch)
so the planner will respect the cache fast-path and skip running evaluate_task;
modify the NodePlan creation logic that constructs Context, steps
(Step::Evaluate(Evaluate { cached_evaluation })), and the greedy_evaluate field
to conditionally assign greedy_evaluate = cached_evaluation.is_none() (or
equivalent) for Goal::Build.
🧹 Nitpick comments (1)
crates/cli/src/apply.rs (1)

128-134: 💤 Low value

Unnecessary Arc clone when dereferencing.

*cache.clone() creates a temporary Arc just to immediately dereference it. Since the ref pattern borrows in place, *cache suffices.

♻️ Suggested simplification
-    let mut cached_evaluations = if let Some(ref cache) = *cache.clone()
+    let mut cached_evaluations = if let Some(ref cache) = *cache
         && let HiveLocation::Flake { ref prefetch, .. } = *location
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@crates/cli/src/apply.rs` around lines 128 - 134, The match arm creating
cached_evaluations unnecessarily calls cache.clone() then dereferences it;
replace the deref of the temporary Arc with a direct deref of the existing Arc
(use *cache rather than *cache.clone()) in the if-let pattern that checks
Some(ref cache) and the HiveLocation::Flake branch so the code reads if let
Some(ref cache) = *cache && let HiveLocation::Flake { ref prefetch, .. } =
*location { ... } ensuring you only borrow the inner value instead of cloning
the Arc.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Outside diff comments:
In `@crates/core/src/hive/plan.rs`:
- Around line 233-247: The plan builder sets greedy_evaluate: true
unconditionally for Goal::Build, forcing Evaluate steps to run even when
Evaluate { cached_evaluation: Some(..) } can satisfy the step; update the
Goal::Build branch in NodePlan construction to set greedy_evaluate to false
whenever the initial Evaluate has cached_evaluation.is_some() (i.e., inspect the
cached_evaluation used when creating Step::Evaluate in that branch) so the
planner will respect the cache fast-path and skip running evaluate_task; modify
the NodePlan creation logic that constructs Context, steps
(Step::Evaluate(Evaluate { cached_evaluation })), and the greedy_evaluate field
to conditionally assign greedy_evaluate = cached_evaluation.is_none() (or
equivalent) for Goal::Build.

---

Nitpick comments:
In `@crates/cli/src/apply.rs`:
- Around line 128-134: The match arm creating cached_evaluations unnecessarily
calls cache.clone() then dereferences it; replace the deref of the temporary Arc
with a direct deref of the existing Arc (use *cache rather than *cache.clone())
in the if-let pattern that checks Some(ref cache) and the HiveLocation::Flake
branch so the code reads if let Some(ref cache) = *cache && let
HiveLocation::Flake { ref prefetch, .. } = *location { ... } ensuring you only
borrow the inner value instead of cloning the Arc.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 6c140ad1-f7c0-4c47-b152-bda763fd7687

📥 Commits

Reviewing files that changed from the base of the PR and between 29636eb and 3eff986.

📒 Files selected for processing (10)
  • .sqlx/query-7b75a4af74b33f56f2ceeea1e462d28066719fab4319880dfdd2de215c08ba6a.json
  • .sqlx/query-7d06a5ac5518429aa99edd5d878b6332ad23bf70286f29665f5b3e556aa32c5c.json
  • crates/cli/src/apply.rs
  • crates/cli/src/main.rs
  • crates/core/src/cache/migrations/20260523003752_attribute_lookup.sql
  • crates/core/src/cache/mod.rs
  • crates/core/src/hive/executor.rs
  • crates/core/src/hive/mod.rs
  • crates/core/src/hive/plan.rs
  • crates/core/src/hive/steps/evaluate.rs

@mrshmllow mrshmllow force-pushed the marshmallow/p-okluznlzwxtq branch 2 times, most recently from aaa2a63 to 33547fa Compare May 23, 2026 07:20
@mrshmllow mrshmllow force-pushed the marshmallow/p-okluznlzwxtq branch from 33547fa to 24f1b43 Compare May 24, 2026 00:52
@mrshmllow mrshmllow force-pushed the marshmallow/p-okluznlzwxtq branch from 24f1b43 to e0e2123 Compare May 24, 2026 01:01
@mrshmllow mrshmllow marked this pull request as draft May 24, 2026 01:03
Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 6

🧹 Nitpick comments (1)
crates/core/src/hive/node.rs (1)

346-395: ⚡ Quick win

Consider adding test coverage for force_quiet: true.

The tests verify behavior when force_quiet: false, but there's no test case verifying that passing force_quiet: true correctly appends -q to the SSH arguments.

🧪 Suggested test case
#[test]
fn test_ssh_args_force_quiet() {
    let target = Target::from_host("hello-world");
    let subcommand_modifiers = SubCommandModifiers {
        ssh_verbosity: 2, // Even with verbosity set, force_quiet should win
        ..Default::default()
    };

    let args = target.create_ssh_args(subcommand_modifiers, true).unwrap();
    
    assert!(args.contains(&"-q".to_string()));
    assert!(!args.iter().any(|a| a.starts_with("-v")));
}
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@crates/core/src/hive/node.rs` around lines 346 - 395, Add a unit test that
exercises Target::create_ssh_args with force_quiet set to true to ensure "-q" is
appended and any "-v"/verbosity flags are suppressed; construct a Target (e.g.,
Target::from_host("hello-world")), pass a SubCommandModifiers with ssh_verbosity
> 0, call target.create_ssh_args(subcommand_modifiers, true).unwrap(), then
assert the returned Vec<String> contains "-q" and contains no entries starting
with "-v" (and also assert behavior is consistent with create_ssh_opts if
desired).
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@crates/cli/src/apply.rs`:
- Around line 178-187: The tokio::spawn call in apply() currently
fire-and-forgets the cache persistence task (the block that calls
cache.store_evaluation(prefetch, &cache_name, evaluated_path)), which can let
apply() return before writes complete; instead, collect the JoinHandle returned
by tokio::spawn (for the task that calls cache.store_evaluation) into a
Vec<JoinHandle<()>> (or similar) inside apply(), and before returning from
apply() await/join all handles (e.g., via futures::future::join_all or awaiting
each handle) to ensure store_evaluation completes; update the code around
tokio::spawn, the async move closure, and apply()'s return path so the handles
are awaited and any JoinError is handled/logged appropriately.

In `@crates/core/src/cache/mod.rs`:
- Around line 253-255: The SQL query in crates::core::cache module that filters
on evaluation_cache.node_name using json_each($4) currently has a hard-coded
"limit 100" which can drop valid cache hits; remove the fixed "limit 100" (or
replace it with a configurable parameter passed into the query) so all matching
nodes from json_each($4) are returned; locate the SQL string that references
evaluation_cache.node_name and json_each($4) and either delete the "limit 100"
clause or wire a new limit parameter and use that in the query execution call so
large node selections are not truncated.
- Around line 497-505: The deletion in gc_evaluation_cache currently discards
errors by assigning the execute result to `_`; change this so failures are
handled: capture the result of the sqlx::query!(...).execute(&self.pool).await,
and either propagate the error from gc_evaluation_cache (return a Result and use
`?`) or log the error (e.g., via tracing::error/process logger) with context
including the path identifiers (flake_path_digest, flake_path_name,
output_path_digest, output_path_name) so DB cleanup failures are visible; update
the gc_evaluation_cache function signature to return Result if propagating, or
keep the signature and log the error when execute returns Err.
- Around line 428-433: The GC query currently fetches a single unordered LIMIT
50 slice (the EvaluationPaths query that assigns evaluation_paths), so shutdown
GC can miss stale rows in larger caches; change it to a deterministic, batched
sweep: add an explicit ORDER BY on a stable key (e.g., primary key or timestamp)
and iterate in a loop fetching batches (LIMIT N with a cursor/last_seen key or
OFFSET) until no more rows, performing deletion per-batch, so every row is
eventually considered; update the code around evaluation_paths / the query_as!
call and the surrounding shutdown GC routine to use the ordered, paged
fetch-and-delete loop instead of the single fetch_all.

In `@crates/nix_client/src/lib.rs`:
- Around line 754-760: The NixDaemonClient protocol error is reporting the wrong
wanted version and operation: in the block checking self.writer.version() <
ProtocolVersion::from_parts(1, 22) update the
NixDaemonClientError::NixDaemonProtocolVersion construction to use wanted:
ProtocolVersion::from_parts(1, 22) and change operation: "QueryMissing".into()
to operation: "QueryDerivationOutputMap".into() so the error matches the actual
version check and operation name.
- Around line 381-389: The handlers for STDERR_READ and STDERR_WRITE currently
call unimplemented!() which will panic if the daemon sends those messages;
replace the panics with a graceful error return or no-op handling: for
STDERR_READ call self.read_value().await? to obtain the payload length and then
return an Err with a clear error (or Ok(()) if you choose to ignore stderr), and
for STDERR_WRITE either read the incoming bytes (using existing read logic) and
discard them or return a descriptive error; update the match arm for STDERR_READ
and STDERR_WRITE in the same block so they propagate Result errors rather than
panicking, referencing STDERR_READ, STDERR_WRITE, and read_value().

---

Nitpick comments:
In `@crates/core/src/hive/node.rs`:
- Around line 346-395: Add a unit test that exercises Target::create_ssh_args
with force_quiet set to true to ensure "-q" is appended and any "-v"/verbosity
flags are suppressed; construct a Target (e.g.,
Target::from_host("hello-world")), pass a SubCommandModifiers with ssh_verbosity
> 0, call target.create_ssh_args(subcommand_modifiers, true).unwrap(), then
assert the returned Vec<String> contains "-q" and contains no entries starting
with "-v" (and also assert behavior is consistent with create_ssh_opts if
desired).
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: f2664e82-1eb9-43d3-a937-30ba15932425

📥 Commits

Reviewing files that changed from the base of the PR and between 3eff986 and 24f1b43.

⛔ Files ignored due to path filters (1)
  • Cargo.lock is excluded by !**/*.lock
📒 Files selected for processing (32)
  • .sqlx/query-07792cf21fcc4ffda47c7315ef486d6a4423b7a842ed72b2abe70e2590f74264.json
  • .sqlx/query-4ac5886b4ab863eb9763b807933fbfad43987f3d0f0277df279b8725c37f1c4a.json
  • .sqlx/query-58f5c376a95b8092beb1daf4e5ba3031e7d4254538d9ea0ec3077109574be2c0.json
  • .sqlx/query-6d7658c36b965ffe57cbaaa5550cd0a9c2b45ae2feeda76f7002b334bac28674.json
  • .sqlx/query-7d06a5ac5518429aa99edd5d878b6332ad23bf70286f29665f5b3e556aa32c5c.json
  • .sqlx/query-d2e92efc45d4c8b951656a48329273b352f5c02457bbbaea8aabb737622ccb8d.json
  • .sqlx/query-d9569def6f629c7d6e25b70f56c8e8cddf0ea447deded6bd5987f2097bb92a91.json
  • Cargo.toml
  • crates/cli/src/apply.rs
  • crates/cli/src/main.rs
  • crates/core/Cargo.toml
  • crates/core/src/cache/migrations/20260523003752_attribute_lookup.sql
  • crates/core/src/cache/mod.rs
  • crates/core/src/commands/common.rs
  • crates/core/src/commands/mod.rs
  • crates/core/src/commands/noninteractive.rs
  • crates/core/src/commands/pty/mod.rs
  • crates/core/src/errors.rs
  • crates/core/src/hive/executor.rs
  • crates/core/src/hive/mod.rs
  • crates/core/src/hive/node.rs
  • crates/core/src/hive/plan.rs
  • crates/core/src/hive/steps/activate.rs
  • crates/core/src/hive/steps/build.rs
  • crates/core/src/hive/steps/evaluate.rs
  • crates/core/src/hive/steps/keys.rs
  • crates/core/src/hive/steps/ping.rs
  • crates/core/src/hive/steps/push.rs
  • crates/core/src/lib.rs
  • crates/nix_client/Cargo.toml
  • crates/nix_client/src/lib.rs
  • crates/nix_client/src/store_path.rs
✅ Files skipped from review due to trivial changes (4)
  • .sqlx/query-d9569def6f629c7d6e25b70f56c8e8cddf0ea447deded6bd5987f2097bb92a91.json
  • .sqlx/query-d2e92efc45d4c8b951656a48329273b352f5c02457bbbaea8aabb737622ccb8d.json
  • .sqlx/query-4ac5886b4ab863eb9763b807933fbfad43987f3d0f0277df279b8725c37f1c4a.json
  • .sqlx/query-6d7658c36b965ffe57cbaaa5550cd0a9c2b45ae2feeda76f7002b334bac28674.json

Comment thread crates/cli/src/apply.rs Outdated
Comment thread crates/core/src/cache/mod.rs
Comment thread crates/core/src/cache/mod.rs Outdated
Comment thread crates/core/src/cache/mod.rs Outdated
Comment thread crates/nix_client/src/lib.rs
Comment thread crates/nix_client/src/lib.rs
@mrshmllow mrshmllow force-pushed the marshmallow/p-okluznlzwxtq branch from e0e2123 to c856bf1 Compare May 24, 2026 04:44
@mrshmllow mrshmllow force-pushed the marshmallow/p-okluznlzwxtq branch from c856bf1 to baac012 Compare May 24, 2026 07:13
@mrshmllow mrshmllow force-pushed the marshmallow/p-okluznlzwxtq branch from baac012 to 0201df4 Compare May 24, 2026 08:50
@mrshmllow mrshmllow force-pushed the marshmallow/p-okluznlzwxtq branch from 0201df4 to e68ad9d Compare May 24, 2026 09:13
@mrshmllow mrshmllow force-pushed the marshmallow/p-okluznlzwxtq branch from e68ad9d to 73ab702 Compare May 24, 2026 10:32
@mrshmllow mrshmllow force-pushed the marshmallow/p-okluznlzwxtq branch from 73ab702 to ade3365 Compare May 31, 2026 04:44
@mrshmllow mrshmllow force-pushed the marshmallow/p-okluznlzwxtq branch from ade3365 to 25e0d68 Compare May 31, 2026 04:46
@mrshmllow mrshmllow marked this pull request as ready for review May 31, 2026 04:46
@mrshmllow mrshmllow force-pushed the marshmallow/p-okluznlzwxtq branch from 25e0d68 to ff6eeda Compare May 31, 2026 04:46
@mrshmllow mrshmllow merged commit 143eb2f into trunk May 31, 2026
13 of 18 checks passed
@mrshmllow mrshmllow deleted the marshmallow/p-okluznlzwxtq branch May 31, 2026 04:47
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

release PRs against main rust Pull requests that update rust code

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant